/*
 * Interfejs dla klas posiadających:
 * dane do lokalizacji,
 * dane nagłówków i meta dane o pliku
 * funkcje do wpisania informacji w plik(steganografia).
 *
 *
 */


/**
 * **************************************************************
 *                          BIG TO DO
 *  ----- olać te dziwne funkcje steg i unsteg i polaczyc w nich tyle ile sie da
 * ------ bo wiekszosc plikow ma podobna albo taka sama przecie funkcje, ale na ten czas
 * ------ jeszcze nie ma na to czasu,
 *
 * ---- TO DO NA ZAŚ
 *
 *
 *
 */


package steg.steki;

import java.io.File;
import java.io.IOException;
import steg.sekret.Sekret;
import steg.sekret.UnSekret;
import steg.utils.MojaLinkedHashMap;



/**
 *  Interfejs dla klas plików steganograficznych.
 *
 * @author 
 */
public interface InfPlikSteg {















    public abstract void init(File file) throws StegException, IOException;

    /**
     * Wczytuje do pliku reprezentowanego przez InfPlikSteg ukrytą wiadomość zawartą w Sekret.
     * File fileOut jest plikiem nowym, będącym połączeniem pliku InfPlikStegc i Sekret.
     *
     * @param fileOut
     * @param paczka
     * @throws steg.pliki.StegException
     * @throws java.io.IOException
     */
    public abstract void steg(File fileOut, Sekret paczka) throws StegException, IOException;

    /**
     * Z wczytanego pliku w zależności do typu wyszukuje wiadomość.
     *
     * @param paczka
     * @throws steg.pliki.StegException
     * @throws java.io.IOException
     */
    public abstract void unsteg( UnSekret paczka) throws StegException, IOException;

    /**
     * Informacje o pliku, bardzo pomocne przy wyświetlaniu.
     * @return
     */
    public abstract MojaLinkedHashMap getMetaDane();

    /**
     * Tworzy nowy losowy plik.
     * @param width
     * @param height
     * @throws steg.pliki.StegException
     */
    public abstract void generateRandom(int width, int height) throws StegException;

    /**
     * ??? !!! ??? implementować czy nie ??? narazie zostawiam
     * @return
     */
    public abstract long getPojemnosc();



    // TA UNKCJA NIE POWINNA BYĆ W FILE TYLKO W UNPACZKA !!!
    @Deprecated
    public abstract void unsteg(File fileIn, UnSekret paczka) throws StegException, IOException;


}
